package abel.wlmr.model.type;

import java.util.HashMap;
import java.util.Map;

/**
 * 当启动标志位 PRM =0 时，功能码定义见表 B.3。
 * 表B.3 功能码定义（ PRM=0）
 * 功能码 帧类型 服务功能
 * 0 确认 认可
 * 1～7 —— 备用
 * 8 响应帧 用户数据
 * 9 响应帧 否认：无所召唤的数据
 * 10 —— 备用
 * 11 响应帧 链路状态
 * 12～15 —— 备用
 * 
 * 本标准规定：
 * ——启动站功能码 10（请求 1 级数据）用于应用层请求确认（CON=1）的链路传输，应用层请求确
 * 认标志见本附录 B.4.3.4.3.4。
 * ——启动站功能码 11（请求 2 级数据）用于应用层请求数据的链路传输。
 * 
 * @author Abel
 *
 */
public enum FnProactiveType {
    Confirm(0),
    UserData(8),
    Deny(9),
    Heart(11),
    Reserved(1);

    private byte value;

    private static Map<Byte, FnProactiveType> enumList = new HashMap<>();
    static {
        for (FnProactiveType b : FnProactiveType.values()) {
            enumList.put(b.value, b);
        }
    }

    private FnProactiveType(int v) {
        this.value = (byte) v;
    }

    public static FnProactiveType findEnumByValue(byte v) {
        if (v < 0 || v > 15) {
            return null;
        }

        if (enumList.containsKey(v)) {
            return enumList.get(v);
        } else {
            Reserved.value = v;
            return Reserved;
        }
    }

    /**
     * @return the value
     */
    public byte getValue() {
        return value;
    }

}
